common.skill

জাভাস্ক্রিপ্ট গ্রাফ (JS Graph)

Web Development - জাভাস্ক্রিপ্ট (JavaScript)
336
336

গ্রাফ একটি গাণিতিক কাঠামো যা নোড (Node) বা ভেরটেক্স (Vertex) এবং তাদের মধ্যে সম্পর্ক বা সংযোগ (Edge) দিয়ে গঠিত। ওয়েব ডেভেলপমেন্টে গ্রাফ ব্যবহার করা হয় ডাটা ভিজ্যুয়ালাইজেশন, নেটওয়ার্ক এনালাইসিস, রাস্তাঘাটের মানচিত্র, সোশ্যাল মিডিয়া কনটেন্ট এবং অন্যান্য বিভিন্ন ধরনের সম্পর্ক বিশ্লেষণ করতে।

জাভাস্ক্রিপ্টে গ্রাফ তৈরি করার জন্য, বিভিন্ন গ্রাফ ডেটা স্ট্রাকচার এবং গ্রাফ অ্যালগরিদম (যেমন DFS, BFS) ব্যবহার করা হয়। গ্রাফের উপাদানগুলো (নোড ও এজ) মানচিত্রের মাধ্যমে বা অ্যারে ব্যবহার করে সংরক্ষণ করা হয়।


গ্রাফ ডেটা স্ট্রাকচার

গ্রাফ তৈরি করার জন্য সাধারণত দুটি প্রধান ডেটা স্ট্রাকচার ব্যবহার করা হয়:

অ্যাডজেসেন্সি লিস্ট (Adjacency List)

এটি একটি এমন ডেটা স্ট্রাকচার, যেখানে প্রতিটি নোডের জন্য একটি তালিকা থাকে, যা তার সংযুক্ত নোডগুলিকে নির্দেশ করে। এটি সাধারণত কম জায়গা নেয় এবং গ্রাফের স্পার্স (Sparse) প্রকারের জন্য উপযুক্ত।

let graph = {
    A: ['B', 'C'],
    B: ['A', 'D', 'E'],
    C: ['A', 'F'],
    D: ['B'],
    E: ['B', 'F'],
    F: ['C', 'E']
};

অ্যাডজেসেন্সি ম্যাট্রিক্স (Adjacency Matrix)

এটি একটি 2D অ্যারে, যেখানে প্রতিটি সারি এবং কলাম একটি নোডের প্রতিনিধিত্ব করে। যদি দুটি নোডের মধ্যে সংযোগ থাকে, তাহলে ওই পজিশনে 1 থাকে, না থাকলে 0 থাকে। এটি কম্প্যাক্ট কিন্তু গ্রাফের ঘনত্ব (Dense Graph) বেশি থাকলে আরও বেশি জায়গা নেয়।

let graph = [
    [0, 1, 1, 0, 0, 0], // A
    [1, 0, 0, 1, 1, 0], // B
    [1, 0, 0, 0, 0, 1], // C
    [0, 1, 0, 0, 0, 0], // D
    [0, 1, 0, 0, 0, 1], // E
    [0, 0, 1, 0, 1, 0]  // F
];

গ্রাফে নোড এবং এজ সংযোগ

গ্রাফে নোডের মধ্যে সংযোগ (এজ) স্থাপন করতে জাভাস্ক্রিপ্টের অ্যারে বা অবজেক্ট ব্যবহার করা হয়। এই সংযোগগুলিকে দুটি নোডের মধ্যে সম্পর্ক হিসেবে দেখা হয়।

গ্রাফে নতুন এজ যোগ করা

let graph = {
    A: ['B'],
    B: ['A', 'C'],
    C: ['B']
};

// A থেকে D পর্যন্ত একটি নতুন সংযোগ যোগ করা
graph.A.push('D');
graph.D = ['A']; // নতুন নোড D

console.log(graph);

গ্রাফে এজ মুছে ফেলা

// B থেকে C পর্যন্ত সংযোগ মুছে ফেলা
let index = graph.B.indexOf('C');
if (index > -1) {
    graph.B.splice(index, 1); // C মুছে দেওয়া
}

console.log(graph);

গ্রাফের traversal (ট্রাভার্সাল)

গ্রাফের traversal হল গ্রাফের সমস্ত নোড এবং এজ পরিদর্শন করা। গ্রাফ ট্রাভার্সালের দুটি প্রধান পদ্ধতি রয়েছে:

Depth-First Search (DFS)

DFS হল একটি ট্রাভার্সাল পদ্ধতি যেখানে একটি নোড থেকে শুরু করে যতক্ষণ না সমস্ত সম্পর্কিত নোড পরিদর্শন করা হয়, ততক্ষণ পর্যন্ত গভীরতা অনুসরণ করা হয়।

function dfs(graph, start, visited = {}) {
    if (!start) return;
    visited[start] = true;
    console.log(start);
    graph[start].forEach(neighbor => {
        if (!visited[neighbor]) {
            dfs(graph, neighbor, visited);
        }
    });
}

let graph = {
    A: ['B', 'C'],
    B: ['A', 'D', 'E'],
    C: ['A', 'F'],
    D: ['B'],
    E: ['B', 'F'],
    F: ['C', 'E']
};

dfs(graph, 'A');

Breadth-First Search (BFS)

BFS একটি ট্রাভার্সাল পদ্ধতি যেখানে প্রথমে একটি নোড পরিদর্শন করা হয় এবং তার পরবর্তী স্তরের সমস্ত নোড পরিদর্শন করা হয়।

function bfs(graph, start) {
    let queue = [start];
    let visited = {};
    visited[start] = true;

    while (queue.length) {
        let node = queue.shift();
        console.log(node);

        graph[node].forEach(neighbor => {
            if (!visited[neighbor]) {
                visited[neighbor] = true;
                queue.push(neighbor);
            }
        });
    }
}

let graph = {
    A: ['B', 'C'],
    B: ['A', 'D', 'E'],
    C: ['A', 'F'],
    D: ['B'],
    E: ['B', 'F'],
    F: ['C', 'E']
};

bfs(graph, 'A');

গ্রাফ অ্যালগরিদম

গ্রাফে বিভিন্ন অ্যালগরিদম প্রয়োগ করা হয় যেমন:

  • ডাইকস্ট্রা অ্যালগরিদম: এটি একটি সিঙ্গল সোর্স শর্তে সংক্ষিপ্ততম পথ খুঁজে বের করতে ব্যবহৃত হয়।
  • ফ্লয়েড-ওয়ারশাল অ্যালগরিদম: এটি সমস্ত পেয়ার নোডের মধ্যে সংক্ষিপ্ততম পথ বের করার জন্য ব্যবহৃত হয়।

গ্রাফের ভিজ্যুয়ালাইজেশন

জাভাস্ক্রিপ্টে গ্রাফ ভিজ্যুয়ালাইজ করার জন্য বিভিন্ন লাইব্রেরি ব্যবহৃত হয়, যেমন:

  • D3.js: এটি একটি শক্তিশালী লাইব্রেরি যা ডাটা ভিজ্যুয়ালাইজেশন করার জন্য ব্যবহার করা হয়। গ্রাফ ভিজ্যুয়ালাইজেশনও এর সাহায্যে করা যায়।
  • Cytoscape.js: এটি একটি লাইব্রেরি যা গ্রাফ এবং নেটওয়ার্ক ভিজ্যুয়ালাইজেশন এবং এনালাইসিসে সহায়তা করে।
  • Vis.js: এই লাইব্রেরিটি ইন্টারঅ্যাক্টিভ গ্রাফ এবং নেটওয়ার্ক তৈরি করতে ব্যবহৃত হয়।

উদাহরণ: Vis.js এর মাধ্যমে গ্রাফ ভিজ্যুয়ালাইজেশন

<!DOCTYPE html>
<html>
<head>
    <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/vis-network@9.1.2/dist/vis-network.min.js"></script>
    <style>
        #graph { width: 500px; height: 500px; border: 1px solid lightgray; }
    </style>
</head>
<body>
    <div id="graph"></div>

    <script>
        var nodes = new vis.DataSet([
            { id: 1, label: 'A' },
            { id: 2, label: 'B' },
            { id: 3, label: 'C' },
            { id: 4, label: 'D' },
            { id: 5, label: 'E' }
        ]);

        var edges = new vis.DataSet([
            { from: 1, to: 2 },
            { from: 1, to: 3 },
            { from: 2, to: 4 },
            { from: 2, to: 5 }
        ]);

        var container = document.getElementById('graph');
        var data = { nodes: nodes, edges: edges };
        var options = { };
        var network = new vis.Network(container, data, options);
    </script>
</body>
</html>

সারাংশ

জাভাস্ক্রিপ্ট গ্রাফ ডেটা স্ট্রাকচার এবং ট্রাভার্সাল অ্যালগরিদমগুলো ওয়েব ডেভেলপমেন্টে গুরুত্বপূর্ণ ভূমিকা রাখে। গ্রাফের বিভিন্ন ধরনের ডেটা স্ট্রাকচার (অ্যাডজেসেন্সি লিস্ট, অ্যাডজেসেন্সি ম্যাট্রিক্স) ব্যবহার করে নোড এবং এজ সংযোগ করা যায়। DFS এবং BFS মত অ্যালগরিদম দ্বারা গ্রাফ ট্রাভার্সাল করা হয়। এছাড়া, গ্রাফের ভিজ্যুয়ালাইজেশন করতে D3.js, Cytoscape.js এবং Vis.js মতো লাইব্রেরি ব্যবহার করা যায়। জাভাস্ক্রিপ্টে গ্রাফ ব্যবহার করে আপনি ডাটা সম্পর্ক বিশ্লেষণ করতে পারেন, যা ওয়েব অ্যাপ্লিকেশন এবং অন্যান্য ডেটা প্রসেসিং কাজে কার্যকরী।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion